<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  // function Cat(name, color) {
  //   this.name = name;
  //   this.color = color;
  // }

  // Cat.prototype.say = function () {
  //   console.log(this.name, this.color);
  // }

  // console.dir(Cat);

  // var Tom = new Cat("Tom", "black");
  // console.log(Tom);

  // console.log(Tom.constructor === Cat);
  // console.log(Tom.__proto__ === Cat.prototype);

  // console.log(Cat.prototype);

  // console.log(Cat.prototype.__proto__.constructor === Object);
  // console.log(Cat.prototype.__proto__ === Object.prototype);

  // console.log({}.__proto__ === Object.prototype);


  // console.log(Object.prototype.__proto__ === null);

  console.log("-----------------------------------------------------------------------");



  function Cat(name, color) {
    this.name = name;
    this.color = color;
  }

  Cat.prototype.species = "cat";
  Cat.prototype.call = function () {
    console.log("喵喵");
  }
  Cat.prototype.skill = function () {
    console.log("捉冲波");
  }

  Cat.prototype.say = function () {
    console.log(this.name, this.color);
  }

  Object.prototype.hello = "你好冲波"

  console.dir(Cat);

  var Tom = new Cat("Tom", "black");
  console.log(Tom);

  console.log(Tom.name, Tom.color);

  console.log(Tom.species);
  console.log(Tom.say);

  console.log(Tom.toString);
  console.log(Tom.hello);
  console.log(Tom.haha);

  console.log("-------------------------------------------------------------------------");

  // function Cat(name, color) {
  //   this.name = name;
  //   this.color = color;
  // }

  // Cat.prototype.species = "cat";
  // Cat.prototype.call = function () {
  //   console.log("喵喵");
  // }
  // Cat.prototype.skill = function () {
  //   console.log("捉冲波");
  // }

  // Cat.prototype.say = function () {
  //   console.log(this.name, this.color);
  // }

  // Object.prototype.hello = "你好冲波";


  // var Tom = new Cat("Tom", "black");
  // console.log(Tom);

  // var arr = new Array(1, 2, 3, 4,);
  // var obj = new Object({ a: 1, b: 2 })

  // console.log(Tom.hello);
  // console.log(arr.hello);
  // console.log(obj.hello);

  // // instanceOf()  判断某个实例化对象的原型链上 是否存在 某个构造函数 的原型对象;
  // console.log(Tom instanceof Cat, Tom instanceof Object);

  // // in     判断某个属性  是否存在于  一个实例化对象(实例对象)的原型链上  =>   判断的一个实例化对象(实例对象)的原型链上是否存在某个属性
  // for (var key in Tom) {  //遍历实例本身及其原型链上
  //   console.log(key);
  // }

  // console.log("name" in Tom); // =>true
  // console.log("species" in Tom); // =>true
  // console.log("haha" in Tom); // =>false

  // // hasOwnProperty(key)      判断的一个实例化对象(实例对象)上是否存在某个属性
  // console.log(Tom.hasOwnProperty("name"));
  // console.log(Tom.hasOwnProperty("color"));

  // // toString()      将实例化对象转化为字符串
  // console.log(Tom);
  // console.log(Tom.toString()); //  => [object Object]

  // var date = new Date();
  // console.dir(date);

  // var reg = new RegExp();
  // console.dir(reg);

</script>

</html>